#ifndef __LIST_TYPE_H__
#define __LIST_TYPE_H__
#include <assert.h>
#include "list.h"
//#include "zflist.h"
//#include "fzlist.h"
typedef enum {
	LIST_INT,
	LIST_CHAR ,
	LIST_STRING ,
	LIST_FLOAT,
} LIST_TYPE ;

static unsigned int test_steps=0;

void inline LIST_SHOW( LIST_ROOT * root_p , LIST_NODE * node_p , void * parm){
	assert( root_p );
	assert( node_p );

	switch( node_p->type ){
	case LIST_INT:
		printf("LIST --:Root: %08X  Size: %d Addr: %08X Data: %08X|| ITEM --: Data : %d Type %d Size %d\n" , 
			root_p , 
			root_p->node_count,
			node_p,
			node_p->data_p,
			*(int *)node_p->data_p,
			node_p->type,
			node_p->size);
		break;
	case LIST_CHAR:
		printf("LIST --:Root: %08X  Size: %d Addr: %08X Data: %08X|| ITEM --: Data : %c Type %d Size %d\n" , 
			root_p , 
			root_p->node_count,
			node_p,
			node_p->data_p,
			*(char *)node_p->data_p,
			node_p->type,
			node_p->size);
		break;
	case LIST_STRING:
		printf("LIST --:Root: %08X  Size: %d Addr: %08X Data: %08X|| ITEM --: Data : %s Type %d Size %d\n" , 
			root_p , 
			root_p->node_count,
			node_p,
			node_p->data_p,
			(char *)node_p->data_p,
			node_p->type,
			node_p->size);
		break;
	case LIST_FLOAT:
		printf("LIST --:Root: %08X  Size: %d Addr: %08X Data: %08X|| ITEM --: Data : %f Type %d Size %d\n" , 
			root_p , 
			root_p->node_count,
			node_p,
			node_p->data_p,
			*(float *)node_p->data_p,
			node_p->type,
			node_p->size);
		break;
	default:
		printf("Unknown Type\n");
		break;
	}

}
void LIST_REPORT_SINGLE( LIST_ROOT * root_p , LIST_NODE * node_temp , char * func_name ){
	assert( node_temp );
	assert( root_p );
	assert( func_name );
	printf("\033[31m\n************ TEST_STEP:%d  FUNC: %s ***************\033[0m\n" , test_steps++ , func_name );
	LIST_SHOW( root_p , node_temp ,NULL);

	return ;
}

void LIST_REPORT_TEST( LIST_ROOT * root_p ,char * func_name ){
	assert( root_p );
	assert( func_name );

	printf("\033[31m\n************ TEST_STEP:%d  FUNC: %s ***************\033[0m\n" , test_steps++ , func_name );
	_list_root_foreach( root_p , LIST_SHOW , NULL);
	return;
}	
#endif
